﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Infra.Common.DAO
{
    public class FornecedorDAL
    {
        public static void Salvar(Infra.Entity.PERFORNECEDOR fornecedor)
        {
            Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext();
            if (fornecedor.CODPESSOA != 0)
            {
                //Alterar dados fornecedor
                var forn = dc.PERFORNECEDORs.Single(fn => fn.CODPESSOA == fornecedor.CODPESSOA);
                forn.forNome = fornecedor.forNome;
                forn.forMorada = fornecedor.forMorada;
                forn.forCidade = fornecedor.forCidade; 
                forn.CODMunicipio = fornecedor.CODMunicipio;
                forn.CODProvincia = fornecedor.CODProvincia;
                forn.CODPais = fornecedor.CODPais;
                forn.forTelefone1 = fornecedor.forTelefone1;
                forn.forEmail = fornecedor.forEmail;
                forn.forFax = fornecedor.forFax;
                forn.forCaixapostal = fornecedor.forCaixapostal;
                forn.forPessoaContacto = fornecedor.forPessoaContacto;
                forn.forEmailPC = fornecedor.forEmailPC;
                forn.forTelefonePC = fornecedor.forTelefonePC;
                dc.SubmitChanges();
            }
            else
            {
                //Salvar dados do fornecedor
                dc.PERFORNECEDORs.InsertOnSubmit(fornecedor);
                dc.SubmitChanges();
            }
        }

        public static void Excluir(int idFornecedor)
        {
            Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext();
            var fornecedor = dc.PERFORNECEDORs.Single(fn => fn.CODPESSOA == idFornecedor);
            dc.PERFORNECEDORs.DeleteOnSubmit(fornecedor);
            dc.SubmitChanges();
        }

        public static List<Infra.Entity.PERFORNECEDOR> Pesquisar(int codigo, String nome, String morada, String cidade, int idmunicipio, int idprovincia,
            int pais, String telefone, String email, String fax, String caixapostal, String pessoaContacto, String emailPC, String fonePC)
        {
            Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext();
            var fn = from fornecedor in dc.PERFORNECEDORs
                     where ((codigo.Equals(0) || codigo.Equals(fornecedor.CODPESSOA) &&
                           (nome.Equals(string.Empty) || nome.Equals(fornecedor.forNome.Contains(nome)))))
                     select fornecedor;
            List<Infra.Entity.PERFORNECEDOR> fornecedores = fn.ToList();
            return fornecedores;
        }

        public static List<Infra.Entity.PERFORNECEDOR> Pesquisar()
        {
            Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext();
            var fn = from fornecedor in dc.PERFORNECEDORs
                     select fornecedor;
            List<Infra.Entity.PERFORNECEDOR> fornecedores = fn.ToList();
            return fornecedores;
        }

        public static List<Infra.Entity.PERFORNECEDOR> PesquisarSP(int codigo, String nome, String morada, String cidade, int idmunicipio, int provincia,
            int pais, String telefone, String email, String fax, String caixapostal, String pessoaContacto, String emailPC, String fonePC)
        {
            // Pesquisa usando Stored procedure
            //Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext();
            //var fn = dc.SP_PESQUISA_FORNECEDOR(codigo, nome);
            //List<Infra.Entity.PERFORNECEDOR> fornecedores = fn.ToList();
            return null;
        }
    }
}
